package com.example.design_pattern.proxy;

// 下面这个例子，演示的是，静态代理。

// 测试类
public class ProxyTest01 {
    public static void main(String[] args) {
        RealSubject realSubject = new RealSubject();
        ProxySubject proxySubject = new ProxySubject(realSubject);

        proxySubject.doSomething();
    }
}

// 被代理对象和代理对象，必须要实现同一个接口
// 定义接口
interface Subject {
    void doSomething();
}

// 被代理对象
// 实现接口的类
class RealSubject implements Subject {

    @Override
    public void doSomething() {
        System.out.println("RealSubject is doing something...");
    }
}

// 代理对象
// 代理类
class ProxySubject implements Subject {
    private RealSubject realSubject;

    // 就这样吗？感觉好像这个例子不太对。其实之所以这么简单，是因为这个例子演示的是静态代理，并不需要用到反射，所以看起来比较简单。
    public ProxySubject(RealSubject realSubject) {
        // 静态代理直接在这里替换就好了。
        this.realSubject = realSubject;
    }

    @Override
    public void doSomething() {
        System.out.println("ProxySubject is doing something before delegating...");
        realSubject.doSomething();
        System.out.println("ProxySubject is doing something after delegating...");
    }
}

